#include "cercle.h"

Cercle::Cercle(){}

Cercle::Cercle(int _rayon, Point p1)
{

	this->init(_rayon,p1);

}

// pour re-initialisation
void Cercle::init(int _rayon, Point p1)
{
	centre = p1;
	rayon = _rayon;
	genere_ligne();
}


// fonction pour la mise au Point
void Cercle::afficher(Canevas &cv)
{
	for(int i = 0; i< (int)cercle_ligne.size(); i++)
	{
		cercle_ligne.at(i).afficher(cv);
	}

}

// fonction pour deplacer un Cercle en absolu.  Les parametres sont des
// deplacement par rapport a la position courante.
void Cercle::deplacement(int deltaX, int deltaY)
{
	Point point_temp;
	for(int i = 0;  i< (int)cercle_ligne.size(); i++)
	{
		point_temp.init(cercle_ligne.at(i).valPoint1());
		point_temp.deplacement(deltaX,deltaY);
		cercle_ligne.at(i).changePoint1(point_temp);

		point_temp.init(cercle_ligne.at(i).valPoint2());
		point_temp.deplacement(deltaX,deltaY);
		cercle_ligne.at(i).changePoint2(point_temp);
	}
}

// fonction pour deplacer un Cercle proportionnellement a un centre.
// Les parametres sont le Cercle de reference un la proportion du deplacement
void Cercle::deplacementProp(Point ancre, float proportion)
{
	Point point_temp;
	for(int i = 0;  i< (int)cercle_ligne.size(); i++)
	{
		point_temp.init(cercle_ligne.at(i).valPoint1());
		point_temp.modif_taille(ancre,proportion);
		cercle_ligne.at(i).changePoint1(point_temp);

		point_temp.init(cercle_ligne.at(i).valPoint2());
		point_temp.modif_taille(ancre, proportion);
		cercle_ligne.at(i).changePoint2(point_temp);
	}
}

// generer les figure
void Cercle::genere_ligne()
{
	const double PI = 3.141592654;
	Point p1,p2;

	for(int i = 0 ; i < 360 ; i+= 20)
	{
		p1.init((int)(centre.valX() + (rayon * cos(i*PI/180))),
				(int)(centre.valY() + (rayon * sin(i*PI/180))));
		p2.init((int)(centre.valX() + (rayon * cos((i+20)*PI/180))),
			(int)(centre.valY() + (rayon * sin((i+20)*PI/180))));

		Ligne ligne_tmp;
		ligne_tmp.init(p1,p2);
		cercle_ligne.push_back(ligne_tmp);
	}

}

Point Cercle::val_Centre()
{
	return centre;
}

int Cercle::val_Rayon()
{
	return rayon;
}
